const Dep={
    clientList:{},
    listen(key,fn){
        (this.clientList[key]||(this.clientList[key]=[])).push(fn)
        console.log(this.clientList);
    },
    trigger(){
        // let key=Array.prototype.shift.call(arguments)
        // let fns=this.clientList[key]
        //某订阅者的所有函数.第一个参数，订阅者
        fns=this.clientList[arguments[0]]
        if(!fns||fns.lenght===0){
            return false
        }
        for(let i=0,fn;fn=fns[i++];){
            // fn.apply(this,arguments)
            //第二个参数，为修改过后的属性值
            fn(arguments[1])
        }
    }
}
function jack({data,tag,dataKey,selector}){
    let value
    let el=document.querySelector(selector)
    Object.defineProperty(data,dataKey,{
        get(){
            return value
        },
        set(val){
            value=val
            Dep.trigger(tag,val)
        },
        configurable:true
    })
    Dep.listen(tag,function(text){
        el.innerHTML=text
    })
}